package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 *
 * 该类用于封装API返回的标准数据格式，包括状态码（code）和信息（msg）。
 * 提供了多个静态方法用于生成不同的返回结果，如成功、失败及带有自定义消息的返回。
 *
 * @author team10
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;

	/**
	 * 构造函数，默认返回成功的状态码（code = 0）
	 */
	public R() {
		put("code", 0);  // 默认成功返回 code 为 0
	}

	/**
	 * 返回错误信息，默认错误码 500 和消息
	 *
	 * @return R 错误返回
	 */
	public static R error() {
		return error(500, "未知异常，请联系管理员");
	}

	/**
	 * 返回错误信息，带有自定义错误消息
	 *
	 * @param msg 错误消息
	 * @return R 错误返回
	 */
	public static R error(String msg) {
		return error(500, msg);
	}

	/**
	 * 返回错误信息，带有自定义错误码和错误消息
	 *
	 * @param code 错误码
	 * @param msg 错误消息
	 * @return R 错误返回
	 */
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);  // 设置错误码
		r.put("msg", msg);    // 设置错误消息
		return r;
	}

	/**
	 * 返回成功信息，带有自定义消息
	 *
	 * @param msg 成功消息
	 * @return R 成功返回
	 */
	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);  // 设置成功消息
		return r;
	}

	/**
	 * 返回成功信息，带有自定义数据
	 *
	 * @param map 自定义数据
	 * @return R 成功返回
	 */
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);  // 将自定义数据添加到返回的对象中
		return r;
	}

	/**
	 * 返回成功信息，默认返回 code = 0
	 *
	 * @return R 成功返回
	 */
	public static R ok() {
		return new R();  // 返回一个默认的成功结果
	}

	/**
	 * 重写put方法，使其支持链式调用
	 *
	 * @param key 键
	 * @param value 值
	 * @return 当前对象
	 */
	public R put(String key, Object value) {
		super.put(key, value);  // 调用父类的 put 方法
		return this;  // 返回当前对象，支持链式调用
	}
}
